package com.lonely.fx.dialog;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonBar;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.util.Callback;

import java.util.Optional;
import java.util.function.Consumer;


/**
 * @date: 2022-08-01 15:22
 * @author: ztkj-hzb
 * @description: Dialog 基类属性设置
 **/
public class DialogSettingMain extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    /**
     *
     */
    @Override
    public void start(Stage primaryStage) throws Exception {

        HBox hBox = new HBox();
        Button button = new Button("点击弹框");

        hBox.getChildren().addAll(button);
        primaryStage.setScene(new Scene(hBox));
        primaryStage.setWidth(600);
        primaryStage.setHeight(500);
        primaryStage.show();

        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {

                Dialog<String> dialog = new Dialog<>();

                //添加操作按钮
                dialog.getDialogPane().getButtonTypes().add(ButtonType.CANCEL);
                //添加自定义的操作按钮
                ButtonType loginButtonType = new ButtonType("登录", ButtonBar.ButtonData.YES);
                ButtonType registryButtonType = new ButtonType("注册", ButtonBar.ButtonData.NO);
                dialog.getDialogPane().getButtonTypes().add(loginButtonType);
                dialog.getDialogPane().getButtonTypes().add(registryButtonType);

                //设置标题
                dialog.setTitle("登录界面");

                //设置宽高的两种方式---第一种，通过 getDialogPane 来设置，可以在show()之前
                dialog.getDialogPane().setPrefSize(500, 500);

                //设置header部分的文本
                dialog.setHeaderText("who are you");

                //设置对话框内容
                dialog.setContentText("风中追风");

                //设置图标
                dialog.setGraphic(new ImageView(new Image("icons/mla.png", 30.0, 30.0, true, true)));

                //设置弹框出现位置--相对屏幕
                //dialog.setX(200);
                //dialog.setY(200);

                //设置是否可以拉伸弹框面板--默认是fale 不能拉伸
                //dialog.setResizable(true);

                //通过设置这个用来传递数据
                dialog.setResultConverter(new Callback<ButtonType, String>() {
                    @Override
                    public String call(ButtonType param) {
                        System.out.println(param);

                        if (param == loginButtonType) {
                            return "hello";
                        }

                        return "world";
                    }
                });


                //获取dialog中的按钮信息
                Button loginBtn = (Button) dialog.getDialogPane().lookupButton(loginButtonType);
                loginBtn.setOnAction(new EventHandler<ActionEvent>() {
                    @Override
                    public void handle(ActionEvent event) {
                        String result = dialog.getResult();
                        System.out.println("传递的result值：" + result);
                    }
                });

                //打开弹框，异步
                //dialog.show();

                //打开弹框，同步阻塞，推荐使用这个
                dialog.showAndWait().ifPresent(new Consumer<String>() {

                    /**
                     * 当点击其中的操作按钮时触发
                     * @param s
                     */
                    @Override
                    public void accept(String s) {
                        System.out.println("打开弹窗：" + s);
                    }
                });


                //TODO 设置宽高的两种方式---第二种，通过 getDialogPane 来设置，必须在show()之后
                //dialog.setWidth(500);
                //dialog.setHeight(500);


            }
        });

    }
}
